Modèle-Vue-Contrôleur (MVC)
===========================

Yii implémente le modèle de conception modèle-vue-contrôleur (MVC), qui est
largement adopté dans la programmation Web. MVC a pour but de séparer la logique
métier des considérations d'interface utilisateur, de sorte que les développeurs peuvent plus
facilement changer chaque partie sans affecter l'autre. Dans MVC, le modèle représente
l'information (les données) et les règles de gestion, la vue contient des éléments
de l'interface utilisateur tels que les entrées sous forme de texte, et le contrôleur gère
la communication entre le modèle et la vue.

Outre la mise en oeuvre de MVC, Yii introduit également un contrôleur frontal,
appelé `Application`, qui encapsule le contexte d'exécution pour le traitement
d'une requête. Application recueille des informations sur une requête de l'utilisateur,
puis il l'envoie à un contrôleur approprié pour traitement ultérieur.

Le schéma suivant montre la structure statique d'une application Yii:

![Structure statique d'une Application Yii](structure.png)


Un flux de travail typique
--------------------------

Le schéma suivant montre un flux de travail typique d'une application Yii quand
elle traite une requête d'un utilisateur:

![Déroulement typique d'une application Yii](flow.png)

   1. Une requête utilisateur est envoyée à l'adresse `http://www.exemple.com/index.php?r=post/show&id=1`
et le serveur Web traite la requête en exécutant le script d'amorçage (bootstrap) `index.php`.
   2. Le script d'amorçage crée une instance d'[Application](/doc/guide/basics.application) et l'exécute.
   3. L'Application obtient des informations détaillées sur la demande de l'utilisateur depuis le [composant d'application](/doc/guide/basics.application#application-component)
nommé `request`.
   4. L'application détermine le [controller](/doc/guide/basics.controller) demandé
et l'[action](/doc/guide/basics.controller#action) avec l'aide
d'un composant d'application nommé `urlManager`. Dans cet exemple, le contrôleur
est `post`, qui se réfère à la classe `PostController`, et l'action est `show`,
dont la signification réelle est déterminée par le contrôleur.
   5. L'application crée une instance du contrôleur demandé pour traiter la demande de l'utilisateur.
Le contrôleur détermine que l'action `show` fait référence à une méthode nommée `actionShow` dans la classe contrôleur. Ensuite il crée et exécute les filtres (par exemple contrôle de l'accès, mesure des performances) associés à cette action. L'action est exécutée si elle est autorisée par les filtres.
   6. L'action lit en base de données un `Post` [model](/doc/guide/basics.model) dont l'ID est `1`.
   7. L'action effectue le rendu de la vue [view](/doc/guide/basics.view) nommée `show` avec le modèle `Post`.
   8. La vue lit et affiche les attributs du modèle `Post`.
   9. La vue exécute quelques [widgets](/doc/guide/basics.view#widget).
   10. Le résultat du rendu de la vue est intégré dans un gabarit [layout](/doc/guide/basics.view#layout).
   11. L'action complète le rendu de la vue et affiche le résultat à l'utilisateur.


<div class="revision">$Id: basics.mvc.txt 101 2013-11-20$</div>
